﻿using System;
using System.Collections.Generic;
using System.Text;

namespace AlgorithmTest
{
    public class T_0012_IsPalindrome
    {
        // 验证回文串

        // 给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。
        // 说明：本题中，我们将空字符串定义为有效的回文串。

        // 提示：
        //  1 <= s.length <= 2 * 10^5
        //  字符串 s 由 ASCII 字符组成

        public void Test()
        {
            var s = "A man, a plan, a anal: Panama";
            Console.WriteLine("amanaplanacanalpanama".Length);
            Console.WriteLine(IsPalindrome(s));
            Console.Read();
        }

        // 双指针
        public bool IsPalindrome(string s)
        {
            if (s.Length == 0)
                return true;
            int l = 0, r = s.Length - 1;
            s = s.ToLower();
            while (l < r)
            {
                if (!char.IsLetterOrDigit(s[l]))
                {
                    l++;
                    continue;
                }
                if (!char.IsLetterOrDigit(s[r]))
                {
                    r--;
                    continue;
                }
                if (s[l] == s[r])
                {
                    l++;
                    r--;
                }
                else
                {
                    return false;
                }
            }
            return true;
        }

        // 使用正则匹配过滤
        public bool IsPalindrome1(string s)
        {
            var actual = s.Replace("[^A-Za-z0-9]", "").ToLower().ToCharArray();
            Array.Reverse(actual);
            return actual.ToString() == s;
        }

    }
}
